/*


Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组，
数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致 。
如果对象的键-值都不可枚举，那么将返回由键组成的数组。

语法：
Object.keys(obj)
 */


Object.prototype.nameE='blue'


let simpleColors = {
    nameA: 'a',
    nameB: 'b'
};
let natureColors = {
    colorC: 'green',
    colorD: 'yellow'
};

//指定natureColors的原型到simpleColors
Object.setPrototypeOf(natureColors, simpleColors);

//Object.keys自身可枚举属性键,没有枚举到指定到simpleColors的,也没有枚举原型链上的
console.log(Object.keys(natureColors)) //[ 'colorC', 'colorD' ]

console.log(natureColors['nameA']) // a
console.log(natureColors['nameB']) // b

/**
 Object.setPrototypeOf() 方法设置一个指定的对象的原型 ( 即, 内部[[Prototype]]属性）到另一个对象或 null。
 Object.keys(natureColors)返回natureColors对象的自身可枚举属性键：['colorC'，'colorD']。
 natureColors包含从simpleColors原型对象继承的属性，但是Object.keys()函数会跳过它们。

 */




//测试
var arr = ['a', 'b', 'c'];
console.log(Object.keys(arr)); // console: ['0', '1', '2']

//测试
var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.keys(obj)); // console: ['0', '1', '2']

//测试
var anObj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.keys(anObj)); // console: ['2', '7', '100']

//测试
var obj = [1,2,3,'a'];
console.log(Object.keys(obj)); // [ '0', '1', '2', '3' ]